package PenTest.Soluation5;

import java.util.*;


/**
 * 题目： 除2！
 *
 * 1. 先sum 计算总和
 * 2. 偶数单独入堆
 * 3. /2 时单独出大跟堆处理偶数，并且sum进行-=该处理后的最大偶数的一半，
 * 4.处理后还是偶数就继续入堆
 * 5. 循环终止条件： 堆为空或者处理次数为零
 *
 */

public class Main {


    public static void main(String[] args) {
        
        // 输入
        Scanner in = new Scanner(System.in);
        
        // 长度
        int n = in.nextInt();
        int y = in.nextInt();
        
        
        
        // 大根堆
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b) -> {
            return   b-a;          
            });

        
        long sum =0;    
        for(int i=0; i < n; i++) {
            long num = in.nextInt();
            
            sum += num;
//             是偶数情况就入堆
            if(num % 2==0) {
                maxHeap.add((int)num);
            }
      
                
        }
        
        
        // 最后出大根堆
        while(y-- != 0 && !maxHeap.isEmpty()) {
             int t = maxHeap.poll() / 2;
            sum -= t;
            if(t % 2== 0) {
                maxHeap.add(t);
            } 
        }
        

//        输出结果
        System.out.println(sum);
        
        
    }


}


/**
 *
 * 题目： mari 和 shiny
 * 1。 统计 s 的每一个都变化
 * 2. 统计 sh 的每一个变化，根据是否 h 结合前面 s 的开始动态规划
 * 3. 统计 shy 的每一个变化，根据是否 y 结合前面 h 的开始动态规划
 *
 */

class Main1 {
    public static void main(String[] args) {

        // 输入
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        String str = in.next();

//      三个变量进行动态规划
        long s=0;
        long sh=0;
        long shy =0;


        if(str.charAt(0) == 's') {
            s=1;
        }


        // 遍历所有的字符
        for(int i=1; i < len; i++) {
            char ch = str.charAt(i);

            // s 的状态转移
            if(ch == 's') {
                s++;
            }

            // h 的状态转移
            if(ch == 'h') {
                sh += s;
            }

            // 一旦属于就加上进行匹配
            if(ch == 'y') {
                shy += sh;
            }
        }

        // 输出
        System.out.println(shy);
    }
}



 class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int y = in.nextInt();
        while(y-- != 0) {
            int a= in.nextInt();
            int b= in.nextInt();
            int c= in.nextInt();

            // 得到 you 的得分
            int you = Math.min(Math.min(a,b),c) ;


            // 得到 oo 得分
            int oo = Math.max(b-you-1,0);

            // 得到最后的数字
            System.out.println(you*2+oo);

        }



    }
}


/**
 *
 * 题目：  数组中最长的子序列
 * 1. 防止重复， 重复就不加
 * 2. 一旦出现断层，就更新结果
 */


 class Solution {


    public int MLS (int[] arr) {

        Arrays.sort(arr);
        long ret = 0;
        long flg = 0;

        for (int i = 1; i < arr.length; i++) {
            if(arr[i-1]+1 == arr[i]) {
                flg++;
            } else if(arr[i-1] == arr[i]) {
                continue;
            } else {
                ret = Math.max(ret,flg);
                flg=0;
            }

        }

        ret = Math.max(ret,flg);



        return (int)(ret+1);


    }
}


